Networks enable computers and other electronic devices to exchange data such as e-mail messages, web pages, audio data, video data, and so forth. Before transmission across a network, data is typically distributed across a collection of packets. A receiver can reassemble the data back into its original form after receiving the packets.
In addition to the data (“payload”) being sent, a packet also includes “header” information. A network protocol can define the information stored in the header, the packet's structure, and how processes should handle the packet.
Different network protocols handle different aspects of network communication. Many network communication models organize these protocols into different layers of a protocol stack. For example, models such as the Transmission Control Protocol/Internet Protocol (TCP/IP) model and the Open Software Institute (OSI) model define protocol stacks that include a “physical layer” that handles signal transmission over physical media; a “link layer” that handles the low-level details of providing reliable data communication over physical connections; a “network layer”, such as the Internet Protocol, that can handle tasks involved in finding a path through a network that connects a source and destination; and a “transport layer” that can coordinate end-point to end-point communication while insulating “application layer” programs from the complexity of network communication.
A different network communication model, the Asynchronous Transfer Mode (ATM) model, is used in ATM networks. The ATM model also defines a physical layer, but defines ATM and ATM Adaptation Layer (AAL) layers in place of the network, transport, and application layers of the TCP/IP and OSI models.
Generally, to send data over the network, different headers are generated for different protocol stack layers. For example, in TCP/IP, a transport layer process generates a transport layer packet (sometimes referred to as a “segment”) by adding a transport layer header to a set of data provided by an application; a network layer process then generates a network layer packet (e.g., an IP packet) by adding a network layer header to the transport layer packet; a link layer process then generates a link layer packet (also known as a “frame”) by adding a link layer header to the network packet; and so on. By analogy, this process is much like stuffing a series of envelopes inside one another.
After the packet(s) travel across the network, the receiver can proceed in the reverse of the above (e.g., “unstuff” the envelopes). For example, the receiver's link layer process can verify the received frame and pass the enclosed network layer packet(s) to the network layer of the protocol stack. The network layer can use the network header to verify proper delivery of the packet(s) and pass enclosed transport segment(s) to the transport layer of the protocol stack. Finally, the transport layer process can process the transport packet based on the transport header and pass the resulting data to an application.
As described above, both senders and receivers have quite a bit of processing to do to handle network communication. Additionally, network connection speeds continue to increase rapidly. For example, network connections capable of carrying 10-gigabits per second and faster may soon become commonplace. This increase in network connection speeds imposes important design issues for devices offering such connections. That is, at such speeds, an inadequately designed device may become overwhelmed with a deluge of network traffic.